/*******************************************************************************
 * Copyright (c) 2000, 2005 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/
package org.eclipse.ui.internal.forms.widgets;

import java.util.Hashtable;

import org.eclipse.swt.graphics.*;

/**
 * @version 1.0
 * @author
 */
public class ImageSegment extends ObjectSegment {
	public static final String SEL_IMAGE_PREFIX = "isel."; //$NON-NLS-1$

	public Image getImage(Hashtable objectTable) {
		return getImage(getObjectId(), objectTable);
	}

	private Image getImage(String key, Hashtable objectTable) {
		if (key == null)
			return null;
		Object obj = objectTable.get(key);
		if (obj == null)
			return null;
		if (obj instanceof Image)
			return (Image) obj;
		return null;
	}

// RAP [if] getSelectedImage unnecessary
//	private Image getSelectedImage(Hashtable objectTable, SelectionData selData) {
//		String key = SEL_IMAGE_PREFIX + getObjectId();
//		Image image = getImage(key, objectTable);
//		if (image==null) {
//			image = FormUtil.createAlphaMashImage(selData.display, getImage(objectTable));
//			if (image!=null)
//				objectTable.put(key, image);
//		}
//		return image;
//	}
/*
	private String getSelectedImageId() {
		if (getObjectId() == null)
			return null;
		return SEL_IMAGE_PREFIX + getObjectId();
	}
*/

// RAP [if] paint unnecessary
//	public void paint(GC gc, boolean hover, Hashtable resourceTable, boolean selected, SelectionData selData, Rectangle repaintRegion) {
//		Image image = getImage(resourceTable);
//		int iwidth = 0;
//		int iheight = 0;
//		if (image != null) {
//			Rectangle rect = image.getBounds();
//			iwidth = rect.width + (isSelectable()?2:0);
//			iheight = rect.height + (isSelectable()?2:0);
//		} else
//			return;
//		Rectangle bounds = getBounds();
//		int ix = bounds.x+(isSelectable()?1:0);
//		int iy = bounds.y+(isSelectable()?1:0);
//
//		if (selData != null) {
//			int leftOffset = selData.getLeftOffset(bounds.height);
//			int rightOffset = selData.getRightOffset(bounds.height);
//			boolean firstRow = selData.isFirstSelectionRow(bounds.y,
//					bounds.height);
//			boolean lastRow = selData.isLastSelectionRow(bounds.y,
//					bounds.height);
//			boolean selectedRow = selData
//					.isSelectedRow(bounds.y, bounds.height);
//			if (selectedRow) {
//				if ((firstRow && leftOffset > ix) ||
//					(lastRow && rightOffset < ix + iwidth/2)) {
//					drawClipImage(gc, image, ix, iy, repaintRegion);
//				}
//				else {
//					Color savedBg = gc.getBackground();
//					gc.setBackground(selData.bg);
//					int sx = ix;
//					int sy = iy;
//					if (repaintRegion!=null) {
//						sx -= repaintRegion.x;
//						sy -= repaintRegion.y;
//					}
//					gc.fillRectangle(sx, sy, iwidth, iheight);
//					Image selImage = getSelectedImage(resourceTable, selData);
//					gc.drawImage(selImage, sx, sy);
//					gc.setBackground(savedBg);
//				}
//			}
//			else
//				drawClipImage(gc, image, ix, iy, repaintRegion);
//		} else
//			drawClipImage(gc, image, ix, iy, repaintRegion);
//		if (selected) {
//			int fx = bounds.x;
//			int fy = bounds.y;
//			if (repaintRegion!=null) {
//				fx -= repaintRegion.x;
//				fy -= repaintRegion.y;
//			}
//			Color fg = gc.getForeground();
//			gc.setForeground(gc.getBackground());
//			// Clean up to avoid canceling out XOR if it is already
//			// selected.
//			gc.drawRectangle(bounds.x, bounds.y, bounds.width - 1,
//					bounds.height - 1);
//			gc.setForeground(fg);
//			gc.drawFocus(fx, fy, bounds.width, bounds.height);
//		}
//	}
// RAP [if] drawClipImage unnecessary
//	private void drawClipImage(GC gc, Image image, int ix, int iy, Rectangle repaintRegion) {
//		if (repaintRegion!=null) {
//			ix -= repaintRegion.x;
//			iy -= repaintRegion.y;
//		}
//		gc.drawImage(image, ix, iy);
//	}

	protected Point getObjectSize(Hashtable resourceTable, int wHint) {
		Image image = getImage(resourceTable);
		if (image==null)
			return new Point(0, 0);
		Rectangle ibounds = image.getBounds();
		return new Point(ibounds.width, ibounds.height);
	}
}
